Введение
   В период бурного развития и внедрения в повседневную жизнь новых компьютерных технологий
ведущую роль играют надежность систем доступа к информации, и ее хранения. Однако чем важнее
информация, тем больше и потери, понесенные вследствие несанкционированного доступа, разрушения или отсутствием доступа вообще к той или иной информации. Для примера достаточно привести случай с сервером компании Yahoo (www.yahoo.com) в феврале 2000 года, когда в результате атаки оборудование было выведено из рабочего состояния
на три часа. По оценкам специалистов убытки составили около 1.2 млрд. долларов.
Таким образом, поиск защитных средств и методик от подобного рода атак остается приоритетным
вопросом компьютерной безопасности.
 Основная причина подобных уязвимости удаленных компьютерных систем кроется в специфике стека
протоколов TCP/IP. Сетевые протоколы TCP/IP были разработаны в период практически полного
отсутствия реальных угроз, и современная четвертая версия стека TCP/IP в полной мере отражает
этот подход. Кроме того, большинство систем имеют собственные ошибки в реализации стека, других
модулях, что снижает их способность противостоять атакам.
  
Обзор существующих атак на базе TCP/IP
  Атаки на TCP/IP можно разделить на два вида: пассивные и активные.
1. Пассивные атаки на уровне TCP
 При данном типе атак не происходит прямого взаимодействия с другими системами.
Фактически все сводиться к наблюдению за доступными данными или сессиями связи.
1.1. Подслушивание
 Атака заключаются в перехвате сетевого потока и его анализе (от англ. "sniffing").
Для осуществления подслушивания необходимо иметь доступ к машине, расположенной на пути
сетевого потока, который необходимо анализировать; например, к маршрутизатору или PPP-серверу
на базе UNIX. При наличии достаточных прав доступа на этой машине, с помощью специального программного
обеспечения возможен просмотр всего трафика, проходящего через заданный интерфейс.
Второй вариант -- получение доступа к компьютеру, который расположен в одном сегменте сети
с системой, имеющей доступ к сетевому потоку. Например, в сети Ethernet сетевая карта может
быть переведена в режим, в котором она будет получать все пакеты, циркулирующие по сети, а не только
адресованной ей конкретно. В данном случае операционная система может быть любой, не обязательно UNIX
(частая ситуация в университетских сетях).
 Поскольку TCP/IP-трафик, как правило, не шифруется, используя соответствующий инструментарий,
можно перехватывать TCP/IP-пакеты, например, telnet-сессий и извлекать из них имена пользователей и их пароли.
 Следует заметить, что данный тип атаки невозможно отследить, не обладая доступом к атакующей
системе, поскольку сетевой поток не изменяется.
2. Активные атаки на уровне TCP
 При данном типе атак происходит взаимодействие с получателем информации,
отправителем и/или промежуточными системами, возможно, модифицирование и/или фильтрация
содержимого TCP/IP-пакетов. Данные типы атак часто кажутся технически сложными в реализации,
однако для хорошего программиста не составляет труда реализовать соответствующий инструментарий.
  К сожалению, сейчас такие программы стали доступны широким массам пользователей.
Активные атаки можно разделить на две части. В первом случае предпринимаются определенные шаги
для перехвата и модификации сетевого потока или попыток "притвориться" другой системой. Во
втором случае протокол TCP/IP используется для того, чтобы привести систему-жертву в нерабочее состоянии.
 Обладая достаточными привилегиями в Unix (или попросту используя DOS или Windows, не имеющие
системы ограничений пользователей), можно вручную формировать IP-пакеты и передавать их по сети.
Естественно, поля заголовка пакета могут быть сформированы произвольным образом. Получив такой
пакет, невозможно выяснить откуда реально он был получен, поскольку пакеты не содержат пути их
прохождения. Конечно, при установке обратного адреса не совпадающим с текущим IP-адресом, атакующий
никогда не получит ответ на отосланный пакет. Однако часто это и не требуется.
 Возможность формирования произвольных IP-пакетов является ключевым пунктом для осуществления активных атак.
2.1. Предсказание TCP sequence number
 Данная атака была описана еще Робертом Моррисом (Robert T. Morris) в A Weakness in the 4.2BSD
Unix TCP/IP Software. Англоязычный термин -- IP spoofing. В данном случае используется имитация
другой системы, которая, например, является доверенной системой для системы-жертвы (в случае
использования протокола rlogin/rsh для беспарольного входа). Метод также используется для других
целей -- например, для использования SMTP сервера для посылки поддельных писем.
 Установка TCP-соединения происходит в три стадии (3-way handshake): клиент выбирает и передает
серверу sequence number (назовем его Client-SN), в ответ на это сервер высылает клиенту пакет
данных, содержащий подтверждение (Client -ACK) и собственный sequence number сервера (Server-SN).
Теперь уже клиент должен выслать подтверждение (Server -ACK).
 После этого соединение считается установленным и начинается обмен данными. При этом каждый пакет
имеет в заголовке поле для sequence number и acknowledge number. Данные числа увеличиваются при
обмене данными и позволяют контролировать корректность передачи.
 Предположим, что возможно предсказать, какой sequence number ( Server -SN) будет выслан сервером.
Это возможно сделать на основе знаний о конкретной реализации TCP/IP. Например, в 4.3 BSD значение
sequence number, которое будет использовано при установке следующего значения, каждую секунду
увеличивается на 125000. Таким образом, послав один пакет серверу, можно получить ответ и
проанализировав его предсказать sequence number для следующего соединения.
Если реализация TCP/IP использует специальный алгоритм для определения sequence number, то он
может быть выяснен с помощью посылки нескольких десятков пакетов серверу и анализа его ответов.
 Система A выступает в роли сервера, системы B и C - в роли клиентов.
Этапы проведения атаки:
1. Ввести систему B в состояние, когда она не сможет отвечать на сетевые запросы. Это может быть
сделано несколькими способами, в простейшем случае нужно просто дождаться перезагрузки системы.
2. Посылка нескольких IP-пакетов, инициирующих соединение, системе A, для выяснения текущего
состояния sequence number сервера.
3. Посылка IP-пакета, в котором в качестве обратного адреса указан уже адрес системы B.
4. Система A отвечает пакетом с sequence number, который направляется системе B. Однако система B
не получит его (она выведена из строя), как, впрочем, и атакующий компьютер. На основе предыдущего
анализа вычисляется sequence number высланный системе B.
5. Происходит подтверждение "получения" пакета от A, отсылкой от имени B пакета с предполагаемым
Server-ACK После этого, если sequence number сервера был угадан верно, соединение считается установленным.
Теперь можно выслать очередной фальшивый IP-пакет, который будет уже содержать данные.
2.2 IP Hijacking
 Если в предыдущем случае происходило инициирование нового соединения, то в данном случае имеет
место перехват всего сетевого потока, его модифицирование и фильтрация. Метод является комбинацией
"подслушивания" и IP spoofing'а.
 Необходимые условия -- доступ к машине, находящейся на пути сетевого потока и наличие достаточных
прав для генерации и перехвата IP-пакетов.
При передаче данных постоянно используются sequence number и acknowledge number (оба поля находятся
в IP-заголовке). Исходя из их значения, сервер и клиент проверяют корректность передачи пакетов.
Существует возможность ввести соединение в "десинхронизированное состояние", когда присылаемые
сервером sequence number и acknowledge number не будут совпадать с ожидаемым значениеми клиента,
и наоборот. В данном случае, атакующий компьютер "прослушивая" линию, может взять на себя функции
посредника, генерируя корректные пакеты для клиента и сервера и перехватывая их ответы.
 Метод позволяет полностью обойти такие системы защиты, как, например, одноразовые пароли, поскольку
начинает работу уже после того, как произойдет авторизация пользователя.
2.3 ACK-буря
 Одна из проблем IP Hijacking заключается в том, что любой пакет, высланный в момент, когда сессия
находится в десинхронизированном состоянии, вызывает так называемый ACK-бурю. Например, пакет выслан
сервером, и для клиента он является неприемлемым, поэтому тот отвечает ACK-пакетом. В ответ на этот
неприемлемый уже для сервера пакет клиент вновь получает ответ. К счастью современные сети строятся
по технологиям, когда допускается потеря отдельных пакетов. Поскольку ACK-пакеты не несут данных,
повторных передачи не происходит.
2.4 Пассивное сканирование
 Сканирование часто применяется для того, чтобы выяснить, на каких TCP-портах работают демоны,
отвечающие на запросы из сети. Обычная программа-сканер последовательно открывает соединения
с различными портами. В случае, когда соединение устанавливается, программа сбрасывает его,
сообщая номер порта пользователю
Данный способ легко детектируются по содержтимому log-файлов или с помощью использования
специальных программ.
 Однако существует другой метод -- пассивное сканирование (английский термин "passive scan").
При его использовании отсылается TCP/IP SYN-пакет на все порты подряд (или по какому-то
заданному алгоритму). Для TCP-портов, принимающих соединения извне, будет возвращен SYN/ACK-пакет,
как приглашение продолжить 3-way handshake. Остальные вернут RST-пакеты. Проанализировав
полученные данные, можно понять, на каких портах работают программа. В ответ на SYN/ACK-пакеты
следует также ответить RST-пакетами, показывая, что процесс установки соединения продолжен
не будет.
2.5. Затопление SYN-пакетами
 Впервые эта атака была упомянута в 1986 году Робертом Т. Моррисом.
В случае входящих соединений система отвечает на пришедший C-SYN-пакет S-SYN/C-ACK-пакетом,
переводит сессию в состояние SYN_RECEIVED и заносит ее в очередь. Если в течении заданного
времени от клиента не придет S-ACK, соединение удаляется из очереди, в противном случае соединение
переводится в состояние ESTABLISHED.
 Когда очередь входных соединений уже заполнена, а система получает SYN-пакет, приглашающий к установке
соединения. По RFC он будет молча проигнорирован.
Затопление SYN-пакетами основано на переполнении очереди сервера, после чего сервер перестает отвечать
на запросы пользователей.
 В различных системах работа с очередью реализована по разному. Так, в BSD-системах, каждый порт имеет
свою собственную очередь размером в 16 элементов. В системах SunOS, напротив, такого разделения и нет
и система просто располагает большой общей очередью. Соответственно, для того, что бы заблокировать,
к примеру, WWW-порт на BSD достаточно 16 SYN-пакетов, а для Solaris 2.5 их количество будет гораздо больше.
После истечение некоторого времени (зависит от реализации) система удаляет запросы из очереди. Однако
ничего не мешает послать новую порцию запросов. Таким образом, даже находясь на соединение 2400 bps,
можно посылать каждые полторы минуты по 20-30 пакетов на FreeBSD-сервер, поддерживая его в нерабочем
состоянии (естественно, эта ошибка была скорректирована в последних версиях FreeBSD).
   
Перечень решаемых в работе задач
Целью данной работы является поиск эффективных способов отражения атак, в частности атак вида DoS.
 Атаку, приводящую к выводу из стабильного, устойчивого состояния системы или к невозможности
дальнейшего использования без перезагрузки, называют "атакой отказа в обслуживании" - DoS (Denial of Service). По сути, атака такого рода препятствуют или полностью блокирует работу сервера.
Атаки DoS не могут проводиться случайным образом и всегда имеют конкретных исполнителей
и конкретную жертву. На данный момент существует большое количество утилит для их проведения,
при этом особой подготовки не требуется. Проще нарушить работу сети или системы, чем получить
к ней несанкционированный доступ.
  
Основные типы атак DoS
 
Захват полосы пропускания - наиболее коварная атака DoS, которая связана с перегрузкой
полосы пропускания (Bandwidth consumption). В этом случае атакующий занимает всю имеющуюся
полосу пропускания сети. Рассмотрим примеры проведения подобной атаки.
Атакующий перегружает целевое сетевое соединение, имея в своем распоряжении канал связи с
большей полосой пропускания, посылая множество пакетов, например, ICMP (Internet Control
Message Protocol, протокол диагностики сети) на целевой хост. Этот способ характерен для
блокировки линий T1 (1.544 Мбит/c) и более производительных сетевых связей. Для заполнения
полосы пропускания таких мощных линий могут использоваться сетевые линии с пропускной
способностью всего 56 или 128 Кбит/с. Следует отметить, что атакующий обычно использует
формат запросов, генерирующий более интенсивный трафик со стороны сервера. Примером такого
запроса может служить команда "GET /index.html". При этом размер страницы пришедшей в ответ
на запрос оказывается в десятки раз больше самого запроса. Также необходимо подчеркнуть,
что атакующий вовсе не должен обладать широкополосным доступом в сеть, достаточно иметь
доступ к удаленному терминалу с широкой полосой пропускания линии.
 Второй способ заключается в следующем: нападающий усиливает атаку DoS, инициируя ее одновременно
из нескольких точек. В этом случае даже по линии 56 Кбит/с можно полностью подавить линию T3
(45 Мбит/с). Усиление атакующего потока происходит за счет направления трафика из нескольких серверов.
 
Истощение ресурсов - атака направленная не на ресурсы сети, а на ресурсы системы. В общем случае атака
истощения ресурсов предполагает расходование процессорных циклов, памяти, квот файловой системы или других
системных ресурсов. Атаки данного рода обычно приводит к полной недоступности одно из ресурсов, переполнению
файловой системы или зависанию процессора.
 
Использование ошибок программирования - данный вид атаки DoS приводит к краху приложений, операционной
системы или аппаратного обеспечения, которые не могут работать в нестандартной ситуации. Такие ситуации
характерны, когда производится посылка на целевую систему пакетов не совместимых со стандартом RFC
(Request For Comments), или, когда программы ожидают пользовательский ввод, т.е. вводится огромное
количество данных, что вызывает переполнение буфера, а иногда даже и выполнение привилегированных команд. От ошибок, скорее всего, не защищена ни одна из систем, будь то ОС или процессор компьютера (одна из атак DoS данного типа: если на процессоре Pentium выполнить инструкцию 0xF00FC7C8A, то произойдет крах любой операционной системы).[6]
 Описание различных типов атак будет неполным, если не упомянуть такую разновидность атак, как
DDoS (Distributed DoS) распределенная DoS атака. Основное преимущество DDoS атаки в практически
неистощимых запасах мощности. Эта производительность происходит от того, при проведении атаки
используется не один компьютер, а некоторое количество подключенных к Интернет машин. Вспомогательные
компьютеры используются без ведома их владельцев с помощью троянских программ и эксплойтов.
Захват полосы пропускания
 Атака smurf относится к наиболее опасной разновидности DoS, поскольку имеет эффект усиления, являющийся
результатом отправки прямых широковещательных запросов ping к системам, которые обязаны послать ответ.
Чтобы использовать особенности широковещательной рассылки нужно как минимум три участника: атакующий,
усиливающая сеть и целевой хост. Атакующий посылает фальсифицированный пакет ICMP ECHO по адресу
широковещательной рассылки усиливающей сети. Адрес источника заменяется адресом жертвы, чтобы представить
дело так будто именно целевая система послала запрос. Поскольку пакет ECHO послан по широковещательному
адресу, все системы усиливающей сети возвращают жертве свои ответы. Рассмотрим процедуру формирования
фальшивого ICMP запроса.[2]
1. С помощью функции connect создается сокет для соединения по протоколу TCP/IP.
2. Параметр сокета SO_BROADCAST устанавливается в 1
3. Организуется цикл, в котором производится вызов следующей функции:
- выделение буфера для IP пакета (заголовки IP+ICMP)
- очистка выделенного буфера
- заполнение структуры пакета:
// Общая длина пакета ip
ip->tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
ip->ihl = 5; //Длина заголовка в 2-х байтных словах
ip->version = 4; //Версия протокола
ip->ttl = 255; //Время жизни
ip->tos = 0; // Тип сервиса
ip->frag_off = 0; //Смещение данного пакета при сборке
ip->protocol = IPPROTO_ICMP; //Тип протокола ICMP
ip->saddr = sin.sin_addr.s_addr; //Адрес целевой системы
ip->daddr = dest; // Широковещательный адрес
ip->check = in_chksum((u_short *)ip, sizeof(struct iphdr));
icmp->type = 8; //Echo Request см таблицу 1.
icmp->code = 0;
- посылка сформированного пакета
- освобождение выделенной памяти
 Послав один пакет ICMP в сеть из 100 систем, атакующий инициирует усиление атаки DoS в сто раз. Коэффициент усиления зависит от состава сети, поэтому для успешной атаки нужно выбрать большую сеть способную подавить работу целевой системы.
Рассмотрим пример. Предположим, что атакующий послал 14 Кбайт непрерывного трафика ICMP на широковещательный адрес усиливающей сети, содержащей 100 систем. Сеть атакующего подключена к Internet полнодуплексным ISDN соединением, усиливающая сеть - линией T3 со скоростью 45Мбит/c, а сеть целевого хоста линией T1 (1.544 Мбит/с). Умножив 14
Кбайт на 100 систем, получим трафик 14Мбит/с направленный на целевую систему. Результатом будет полное блокирование линии T1.[7]
 Существует еще один вариант атаки базирующийся на smurf - fraggle. В данной атаке используются пакеты
UDP вместо ICMP. Атакующий посылает фальсифицированные пакеты UDP по адресу широковещательной рассылки усиливающей сети, обычно на порт 7 (echo).
Каждая система, в которой разрешен ответ на эхо - пакеты, возвратит пакеты системе - жертве.
Если в системах усиливающей сети запрещены эхо - ответы, то системы сгенерируют сообщения ICMP о
невозможности получить эхо - ответ и все равно будет сгенерирован не нужный трафик большого объема.
  
Способы предотвращения нападений
 Предотвратить эффект усиления позволит запрет операций прямой широковещательной рассылки на всех
граничных маршрутизаторах. В устройствах Cisco нужно применить команду no ip directed-broadcast. В Cisco IOS версии 12 прямая широковещательная рассылка запрещена по умолчанию. Дополнительно можно установить в ОС режим отбрасывания эхо - пакетов.
Для систем Solaris, чтобы заблокировать широковещательные эхо - запросы нужно добавить строчку в
файл /etc/rc2.d/S69inet: ndd -set /dev/ip ip_respond_to_echo_broadcast 0.
 В системах Linux для предотвращения smurf атаки нужно воспользоваться брандмауэром ipchains реализованным
на уровне ядра системы. Приведенные ниже правила предназначены для противостояния smurf атаке и регистрации
попыток ее проведения. Поскольку прохождение широковещательных ICMP пакетов явно не разрешено ни одним из
правил, то такие пакеты будут удалены по умолчанию. В правилах указаны не только ECHO REQUEST, но и другие
типы ICMP пакетов, так как атаку можно провести, используя и другие сообщения ICMP протокола.
Необходимо запретить межсегментную пересылку пакетов ICMP с широковещательным адресом назначения, маске сети
или адресу сети по цепочкам input и output.
 Системы FreeBSD версии 2.2.5. и выше по умолчанию запрещают прямые широковещательные рассылки. Включение и
выключение данной опции производится параметром sysctl в net.inet.icmp.bmcastecho.
 В системах AIX 4 или выше ответы на широковещательные запросы запрещены. Команда no bcastping позволяет
включать/выключать ответы.
 Для предотвращения атаки fraggle во всех версиях UNIX в файле /etc/inetd/conf закомментировать строчку
разрешения запуска служб echo и chargen. Важно предотвратить использование сайта в качестве усилителя
атаки, но еще важнее выявить, что сайт используется для проведения подобной атаки. Следует сократить трафик
ICMP и UDP на граничных маршрутезаторах до объема, действительно необходимого системам сети, либо ограничится
определенным типом трафика ICMP. Усилить защиту позволит установка режима CAR (Commited Access Rate),
реализованного в Cisco IOS 1.1CC, 11.1CE и 12.0. В этом случае трафик ICMP ограничивается разумной величиной,
например на уровне 256 или 512 Кбайт. [6]
  
Заключение
 Среди причин проведения DoS атак следует отметить низкую степень защищенности серверов, ошибки в реализации TCP/IP протоколов и программного обеспечения, криминализацию Интернет-сообщества. Возможно, следует ожидать новую версию стека протоколов TCP/IP, которая будет отличаться повышенной устойчивостью к воздействиям деструктивного характера. На данный же момент времени можно лишь воспользоваться корректно
настроенным фаерволом и проводить профилактическую работу по уменьшению эффекта от усиливающих сетей.
Литература
1. "Максимальная безопасность в Linux": Пер. с англ./Автор анонимный - К.: Издательство
"ДиаСофт" 2000. - 400c.
2. "Брандмауэры в Linux": Пер. с англ.: Уч. пос. - М. : Издательский дом "Вильямс", 2000. -
384c.
3. "Linux IP Stacks в комментариях": Пер. с англ./Стефен Т. Сэтчелл и Х.Б. Дж. Клиффорд. - К:
Издательство "ДиаСофт", 2001. - 288 c.
4. "Безопасность глобальных сетевых технологий": Зима В.М. : BHV C-Петербург, 2000 г. 320с.
5. "Защита информации и безопасность компьютерных сетей": Домарев В.Н. :DiaSoft, 2000 г.
480с.
6. "Секреты хакеров": Пер. с англ./Стюарт Макклуре, Ждоел Скембрей-К : Издательство "Лори",
2001.-435c.
7. "Атака через Internet": И. Медведовский, П. Семьянов, В. Платонов М: Москва,2000г., 334с.
8. "Системное программирование на С++ для UNIX": Теренс Чан, под редакцией М.
Коломыцева, - BHV, Киев 1999 г.589с.
9. "Создание сетевых приложений в среде Linux": Пер. с англ. - М. : Издательский дом
"Вильямс", 2001. - 464c.